package com.esunny.resourcevisualization.manage;

import com.esunny.resourcevisualization.constant.ApplyProcessStatus;
import com.esunny.resourcevisualization.dao.ApplyDao;
import com.esunny.resourcevisualization.domain.entity.Apply;
import com.esunny.resourcevisualization.util.HostHolder;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;
import java.util.Date;
import java.util.List;

/**
 * @version 1.0.0.0
 * @ClassName ApplyManage
 * @Description 申请信息数据处理
 * @Author baochencong
 * @Date 2020/11/24 16:23
 */

@Component
public class ApplyManage {

    @Resource
    private ApplyDao applyDao;

    @Resource
    private HostHolder hostHolder;

    /**
     * 添加申请信息
     *
     * @param apply 申请信息
     */
    public boolean addApplyInfo(Apply apply) {
        apply.setApplyBy(hostHolder.getUser().getUsername());
        // apply.setApplyBy("baochencong");
        apply.setApplyStatus(ApplyProcessStatus.waitSubmit);
        apply.setApplySubmitTime(new Date());
        apply.setApplyUpdateTime(new Date());
        apply.setDeleted(false);

        return applyDao.addApplyInfo(apply);
    }

    /**
     * 通过申请id获取申请信息
     *
     * @param applyId 申请id
     * @return 申请信息
     */
    public Apply getApplyInfoById(int applyId) {
        return applyDao.getApplyInfoById(applyId);
    }

    /**
     * 通过id修改用户填写的信息
     *
     * @param apply 待修改信息
     * @return 修改结果
     */
    public boolean updateApplyInfoById(Apply apply) {
        apply.setApplyUpdateTime(new Date());
        return applyDao.updateApplyInfoById(apply);
    }

    /**
     * 通过申请id更新管理员备注和申请状态
     *
     * @param apply 待更新数据
     * @return 更新结果
     */
    public boolean updateAdminRemarkAndStatusById(Apply apply) {
        apply.setApplyUpdateTime(new Date());
        return applyDao.updateAdminRemarkAndStatusById(apply);
    }

    /**
     * 通过申请id更新申请状态
     *
     * @param applyId 申请id
     * @param status  申请状态
     */
    public boolean updateApplyStatusById(int applyId, String status) {
        Apply apply = new Apply();
        apply.setId(applyId);
        apply.setApplyStatus(status);
        apply.setApplyUpdateTime(new Date());

        return applyDao.updateApplyStatusById(apply);
    }

    /**
     * 通过申请id更新流程实例id和申请状态
     *
     * @param apply 待更新信息
     * @return 更新结果
     */
    public boolean updateProcessInstanceIdAndStatusById(Apply apply) {
        apply.setApplyUpdateTime(new Date());
        return applyDao.updateProcessInstanceIdAndStatusById(apply);
    }

    /**
     * 标记删除申请信息
     *
     * @param applyId 申请信息id
     */
    public void remarkDeleteApplyInfo(int applyId) {
        applyDao.remarkDeleteApplyInfo(applyId);
    }

    /**
     * 获取所有申请信息列表
     *
     * @return 申请信息列表
     */
    public List<Apply> getApplyInfoList() {
        return applyDao.getApplyInfoList();
    }

    /**
     * 获取使用中的资源列表
     *
     * @return 使用中的资源列表
     */
    public List<Apply> getUsingApplyList() {
        return applyDao.getUsingApplyList();
    }

    /**
     * 通过申请人获取申请信息列表
     *
     * @param applyBy 申请人用户名
     * @return 申请信息列表
     */
    public List<Apply> getApplyListInfoByApplyBy(String applyBy) {
        return applyDao.getApplyListInfoByApplyBy(applyBy);
    }

    /**
     * 通过流程实例id获取申请信息
     *
     * @param processInstanceId 流程实例id
     * @return 申请信息
     */
    public Apply getApplyInfoByProcessInstanceId(String processInstanceId) {
        return applyDao.getApplyInfoByProcessInstanceId(processInstanceId);
    }

    /**
     * 通过资源缓存id获取申请信息
     *
     * @param resourceCacheInfoId 资源缓存id
     * @return 申请信息
     */
    public Apply getApplyInfoByResourceCacheInfoId(int resourceCacheInfoId) {
        return applyDao.getApplyInfoByResourceCacheInfoId(resourceCacheInfoId);
    }

}
